﻿Imports BUS
Imports DAO
Imports DTO

Public Class ucNhapSach
    Public newPN As Boolean = True
    Public oldID As Integer
    Public oldSoLuong As Integer = 0


    Private Sub btnNhapPhieuSach_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNhapPhieuSach.Click
        Try
            lbThongBao.Text = "Sách nhập lỗi: "
            If dgvPhieuNhapSach.Rows.Count <= 1 Then
                Exit Sub
            End If

            Dim thuong = "ạáàãảâậấầẩẫăặắằẳẵđẹéèẻẽêệếềểễíìỉĩịọòóỏõôộỗổồốơợớờởỡúùủũụưựứừửữ"
            Dim HOA = "ẠÁÀẢÃĂẶẰẮẲẴÂẤẦẨẪẬĐÉÈẼẺẸÊẾỀỂỄỆIÍÌỈĨỊỌÒÓỎÕÔỘỒỐỔỖƠỜỚỢỞỠÚÙỦŨỤƯỰỬỮỨỪ"

            Dim thsoBUS As New ThongSoBUS
            Dim soLuongNhapMin = thsoBUS.QD1_SoLuongNhapMin()
            Dim tonMax = thsoBUS.QD1_SoLuongTonMax()

            Dim ucdate = New ucNgay

            Dim pnDTO As New PhieuNhapSachDTO
            Dim pnBUS As New PhieuNhapSachBUS
            Dim ctpnDTO As New ChiTietPNDTO
            Dim ctpnBUS As New ChiTietPNSachBUS

            'insert vao table PhieuNhapSach
            If newPN Then
                pnDTO.NgayNhap = ucdate.Ngay
                pnBUS.Them(pnDTO)
                oldID = pnDTO.MaPN
            End If

            'insert vao table ChiTietPhieuNhap
            Dim i As Integer = 0
            Dim bool As Boolean = True
            'biến i dùng để chạy từ dòng 1 đến n - 1 dòng trong dgvPhieuNhapSach
            'dòng cuối của dgvPhieuNhapSach là rỗng
            Dim n As Integer = dgvPhieuNhapSach.Rows.Count - 2

            For Each dgvRow As DataGridViewRow In dgvPhieuNhapSach.Rows
                If i > n Then
                    Exit For
                End If
                lbThongBao.Visible = True
                i = i + 1

                If newPN Then
                    ctpnDTO.MaPN = pnDTO.MaPN
                Else
                    ctpnDTO.MaPN = oldID
                End If

                newPN = False

                '
                'Kiem tra su nhap lieu
                '

                Dim regex = "^[0-9 ]*([A-Z" & HOA & "]{1}[a-z" & thuong & "]+[ ]{1})+[0-9 ]*[A-Z" & HOA & "]{1}[a-z" & thuong & "]+[0-9 ]*$"
                If Not Check(dgvRow.Cells("TenSach").Value.ToString(), regex) Then
                    lbThongBao.Text &= i.ToString() + ", "
                    bool = False
                    Continue For
                End If

                regex = "^([A-Z" & HOA & "]{1}[a-z" & thuong & "]+[ ]{1})+[A-Z" & HOA & "]{1}[a-z" & thuong & "]+$"
                If Not Check(dgvRow.Cells("TacGia").Value.ToString(), regex) Then
                    lbThongBao.Text &= i.ToString() + ", "
                    bool = False
                    Continue For
                End If

                regex = "^[0-9]+$"
                If Not Check(dgvRow.Cells("SoLuong").Value.ToString(), regex) Then
                    lbThongBao.Text &= i.ToString() + ", "
                    bool = False
                    Continue For
                End If

                regex = "^[0-9]+.{0,1}[0-9]+$"
                If Not Check(dgvRow.Cells("DonGia").Value.ToString(), regex) Then
                    lbThongBao.Text &= i.ToString() + ", "
                    bool = False
                    Continue For
                End If

                'kiem tra quy dinh 1
                If dgvRow.Cells("SoLuong").Value < soLuongNhapMin Then
                    MessageBox.Show("Sách: '" + dgvRow.Cells("TenSach").Value.ToString() + "' với số lượng nhập không đạt, ít nhất phải là: " + soLuongNhapMin.ToString(), "warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                    lbThongBao.Text &= i.ToString() + ", "
                    bool = False
                    Continue For
                End If

                ctpnDTO.TenSach = XoaKiTuTrangDu(dgvRow.Cells("TenSach").Value.ToString())
                ctpnDTO.MaTL = dgvRow.Cells("TheLoai").Value
                ctpnDTO.TenTL = dgvRow.Cells("TheLoai").FormattedValue.ToString()
                ctpnDTO.TenTG = XoaKiTuTrangDu(dgvRow.Cells("TacGia").Value.ToString())



                Integer.TryParse(dgvRow.Cells("SoLuong").Value, ctpnDTO.SoLuong)
                Integer.TryParse(dgvRow.Cells("DonGia").Value, ctpnDTO.DonGiaNhap)

                Dim sBUS As New SachBUS
                Dim sDTO As New SachDTO
                sDTO.TenSach = ctpnDTO.TenSach
                sDTO.MaTL = ctpnDTO.MaTL
                sDTO.TenTG = ctpnDTO.TenTG
                'kiem tra quy dinh 1
                Try
                    Dim soluongton As Integer = sBUS.SoLuongTon(sDTO)
                    If soluongton > tonMax Then
                        MessageBox.Show("Sách: '" + sDTO.TenSach + "', tác giả: '" + sDTO.TenTG + "' với số lượng tồn lớn hơn tồn Max(" + tonMax.ToString() + ").Nên không cần nhập sách.", "warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                        lbThongBao.Text &= i.ToString() + " "
                        bool = False
                        Continue For
                    End If
                Catch ex As Exception
                End Try

                sDTO.SoLuong = ctpnDTO.SoLuong

                Dim books = sBUS.TimKiem(sDTO)
                Dim ctpns = ctpnBUS.TimKiem(ctpnDTO)

                If books.Count = 0 Then
                    'co them sach hay ko?
                    Dim ques As String = "Sách '" + ctpnDTO.TenSach + "', tác giả: '" + ctpnDTO.TenTG + "', Thể loại: '" + ctpnDTO.TenTL + "' chưa có trong hệ thống." + vbNewLine + "Bạn có muốn thêm vào không?"
                    Dim msg As DialogResult = MessageBox.Show(ques, "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                    If msg = DialogResult.Yes Then
                        sBUS.Them(sDTO)
                    End If
                Else
                    'xet kha nang cap nhat so luong trong sach
                    If ctpns.Count = 0 Then 'cập nhật số lượng sách
                        sBUS.CapNhat(sDTO)
                    Else 'đã cập nhật số lượng rồi, nhưng giờ Đổi lại số lượng tăng thêm(do ấn thay đổi số lượng hay gì đó rồi submit lại) -> tính lại
                        sDTO.SoLuong = sDTO.SoLuong - oldSoLuong 'trừ đi lượng tăng đầu tiên
                        sBUS.CapNhat(sDTO)
                    End If

                End If

                'kiểm tra ctpn có thể được cập nhật lại
                If (ctpns.Count = 0) Then 'add ctpn mới
                    ctpnBUS.Them(ctpnDTO)
                Else 'cập nhật lại ctpn
                    ctpnBUS.CapNhat(ctpnDTO)
                End If

            Next
            If bool Then lbThongBao.Text = "Nhập toàn bộ thành công"

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        End Try

    End Sub

    Private Sub ucNhapSach_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        lbThongBao.Visible = False

        Dim tlBUS As New TheLoaiBUS
        Dim theloais As IQueryable(Of TheLoai)
        theloais = tlBUS.LayBang()

        TheLoai.DataSource = theloais

        TheLoai.ValueMember = "MaTL"
        TheLoai.DisplayMember = "TenTL"
    End Sub

    Private Sub btnNewPN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNewPN.Click
        newPN = True
        dgvPhieuNhapSach.Rows.Clear()
        lbThongBao.Visible = False
    End Sub

    Private Sub dgvPhieuNhapSach_CellBeginEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles dgvPhieuNhapSach.CellBeginEdit
        If e.ColumnIndex = 3 Then 'nếu đúng là thay đổi ở cột số lượng
            If dgvPhieuNhapSach.Rows(e.RowIndex).Cells(e.ColumnIndex).Value Is Nothing Then
                Return
            End If

            Integer.TryParse(dgvPhieuNhapSach.Rows(e.RowIndex).Cells(3).Value.ToString(), oldSoLuong)
        End If
    End Sub
End Class
